﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace IA2MazeSolver
{
    public class Direcao
    {
        private static Direcao _leste;
        public static Direcao Leste
        {
            get
            {
                if (_leste == null)
                {
                    _leste = new Direcao(0, 0);
                }

                return _leste;
            }
        }

        private static Direcao _norte;
        public static Direcao Norte
        {
            get
            {
                if (_norte == null)
                {
                    _norte = new Direcao(0, 1);
                }

                return _norte;
            }
        }

        private static Direcao _oeste;
        public static Direcao Oeste
        {
            get
            {
                if (_oeste == null)
                {
                    _oeste = new Direcao(1, 0);
                }

                return _oeste;
            }
        }

        private static Direcao _sul;
        public static Direcao Sul
        {
            get
            {
                if (_sul == null)
                {
                    _sul = new Direcao(1, 1);
                }

                return _sul;
            }
        }

        public byte PontoA;
        public byte PontoB;

        public Direcao(byte pontoA, byte pontoB)
        {
            this.PontoA = pontoA;
            this.PontoB = pontoB;
        }

        public override String ToString()
        {
            String strDirecao = String.Format("{0}{1}", Convert.ToString(this.PontoA), Convert.ToString(this.PontoB));
            return strDirecao;
        }

        public override bool Equals(object obj)
        {
            Direcao direcao = (Direcao) obj;

            if (this.PontoA == direcao.PontoA && this.PontoB == direcao.PontoB)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public override int GetHashCode()
        {
            return base.GetHashCode();
        }
    }
}
